package com.cyou.qb.common.service;

import java.util.Date;

import com.cyou.nad.datastore.DataList;
import com.cyou.nad.datastore.query.JdbcPage;
import com.cyou.qb.common.domain.QiangbaAdmin;
import com.cyou.qb.common.domain.StatActiveDay;
import com.cyou.qb.service.BaseService;

/**
 * <p>数据统计相关业务层</p>
 * @author zoudongchao
 *
 */
public interface StatisticsService extends BaseService {
	
	/**
	 * <p>条件查询活动统计数据</p>
	 * @param admin
	 * 			管理员账号
	 * @param pageNo
	 * 			分页页码
	 * @param pageSize
	 * 			分页大小
	 * @param activityName
	 * 			活动名称
	 * @param activityState
	 * 			活动状态
	 * @param startDate
	 * 			查询起始时间
	 * @param endDate
	 * 			查询结束时间
	 * @return	
	 * 			分页查询结果
	 */
	public JdbcPage findPageQueryStatistics(QiangbaAdmin admin, int pageNo, int pageSize, String activityName, int activityState, Date startDate, Date endDate) throws Exception;
	
	/**
	 * <p>数据详细页查询</p>
	 * @param activityId
	 * 			活动id
	 * @param activityState
	 * 			活动状态
	 * @param startDate
	 * 			查询起始时间
	 * @param endDate
	 * 			查询结束时间
	 * @return
	 * 			详细信息，不分页
	 */
	public DataList findDetailStatistics(String activityId, int activityState, Date startDate, Date endDate);

	/**
	 * <p>合计数据页查询</p>
	 * @param admin
	 * 			管理员账号
	 * @param activityState
	 * 			活动状态
	 * @param startDate
	 * 			查询开始时间
	 * @param endDate
	 * 			查询结束时间
	 * @return
	 * 			全部数据查询结果，不分页
	 */
	public DataList findTotalStatistics(QiangbaAdmin admin, int activityState, Date startDate, Date endDate) throws Exception;
	
	/**
	 * <p>查询数据汇总</p>
	 * 根据查询条件得到各项总共的数据
	 * @param amdin
	 * 
	 * @param searchType
	 * 			查询类型
	 * @param activityId
	 * 			活动Id
	 * @param activityName
	 * 			活动名称
	 * @param activityState
	 * 			活动状态
	 * @param startDate
	 * 			开始时间
	 * @param endDate
	 * 			结束时间
	 * @return
	 * 			只应返回一行数据
	 */
	public DataList findQueryTotal(QiangbaAdmin admin, String searchType, String activityId, String activityName, int activityState, Date startDate, Date endDate) throws Exception;

	/**
	 * <p>更新已有数据统计记录或者插入一条新纪录</p>
	 * @param statActiveDay	表对应实体
	 */
	public int saveOrUpdateOneStatistics(StatActiveDay statActiveDay);
	
	/**
	 * <p>根据活动id得到活动的G币支出</p>
	 * @author zoudongchao
	 * @param activeId
	 * @param start	开始日期
	 * @param end	结束日期
	 * @return
	 */
	public int findActiveGOut(int activeId, Date start, Date end);
}
